// #include <stdio.h>
// #include <stdlib.h>
// #include <windows.h>
// #define MAX 100
//
// typedef struct Tree {
//     int tree[MAX];
//     int size;
// } Tree;
//
// void InitTree(Tree* t) {
//     t->size = 0;
//     for (int i = 0; i < MAX; i++) {
//         t->tree[i] = -1;  // 初始化所有节点为空
//     }
// }
//
// int findFather(Tree* t, int i) {
//     if (i <= 1) {
//         return 0;  // 根节点无父节点
//     }
//     return i / 2;
// }
//
// int leftChild(Tree* t, int i) {
//     return 2 * i;
// }
//
// int rightChild(Tree* t, int i) {
//     return 2 * i + 1;
// }
//
// void pre(Tree* t, int i) {
//     if (i >= MAX || i <= 0 || t->tree[i] == -1) {
//         return;  // 越界或空节点终止
//     }
//     printf("%d ", t->tree[i]);
//     pre(t, leftChild(t, i));
//     pre(t, rightChild(t, i));
// }
//
// void order(Tree* t, int i) {
//     if (i >= MAX || i <= 0 || t->tree[i] == -1) {
//         return;
//     }
//     order(t, leftChild(t, i));
//     printf("%d ", t->tree[i]);
//     order(t, rightChild(t, i));
// }
//
// void rear(Tree* t, int i) {
//     if (i >= MAX || i <= 0 || t->tree[i] == -1) {
//         return;
//     }
//     rear(t, leftChild(t, i));
//     rear(t, rightChild(t, i));
//     printf("%d ", t->tree[i]);
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     Tree t;
//     InitTree(&t);
//
//     // 构建完全二叉树（1-7）
//     for (int i = 1; i <= 7; i++) {
//         t.tree[i] = i;
//         t.size++;
//     }
//
//     printf("先序遍历: ");
//     pre(&t, 1);  // 输出: 1 2 4 5 3 6 7
//
//     printf("\n中序遍历: ");
//     order(&t, 1); // 输出: 4 2 5 1 6 3 7
//
//     printf("\n后序遍历: ");
//     rear(&t, 1);  // 输出: 4 5 2 6 7 3 1
//
//     return 0;
// }